{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "## （上一章节）过拟合与欠拟合"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.linear_model.base import LinearRegression\n",
    "from sklearn.metrics.scorer import mean_squared_error\n",
    "from sklearn.pipeline import Pipeline\n",
    "from sklearn.preprocessing.data import PolynomialFeatures\n",
    "from sklearn.preprocessing.data import StandardScaler\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x108be89b0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "np.random.seed(666)\n",
    "x = np.random.uniform(-3.0, 3.0, size=100)\n",
    "X = x.reshape(-1,1)\n",
    "y = 0.5 * x**2 + x+2 + np.random.normal(0,1,size=100)\n",
    "plt.scatter(x,y)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 使用线性回归"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/local/seamonster/MachineLearningClassicAlgorithmEnv/lib/python3.6/site-packages/scipy/linalg/basic.py:1226: RuntimeWarning: internal gelsd driver lwork query error, required iwork dimension not returned. This is likely the result of LAPACK bug 0038, fixed in LAPACK 3.2.2 (released July 21, 2010). Falling back to 'gelss' driver.\n  warnings.warn(mesg, RuntimeWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "0.49537078118650091"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lin_reg = LinearRegression()\n",
    "lin_reg.fit(X,y)\n",
    "lin_reg.score(X, y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以看到R方值很低（欠拟合）  \n",
    "画个图来看看效果"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x108c0d7b8>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "y_predict = lin_reg.predict(X)\n",
    "plt.scatter(x,y)\n",
    "# 直线就是拟合的线\n",
    "plt.plot(np.sort(x), y_predict[np.argsort(x)], color='r')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对于多项式回归，使用R方值作为评估是没有问题的  \n",
    "但是不明白这老师到底出于什么原因，要使用MSE（均方误差）-- 姑且理解是为了方便吧"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "3.0750025765636577"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y_predict = lin_reg.predict(X)\n",
    "mean_squared_error(y, y_predict)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 使用多项式回归"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "def PolynomialRegression(degree):\n",
    "    return Pipeline(\n",
    "        [\n",
    "            ('poly', PolynomialFeatures(degree=degree)),\n",
    "            ('std_scaler', StandardScaler()),\n",
    "            ('lin_reg',LinearRegression())\n",
    "        ]\n",
    "    )"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Pipeline(memory=None,\n     steps=[('poly', PolynomialFeatures(degree=2, include_bias=True, interaction_only=False)), ('std_scaler', StandardScaler(copy=True, with_mean=True, with_std=True)), ('lin_reg', LinearRegression(copy_X=True, fit_intercept=True, n_jobs=1, normalize=False))])"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "poly2_reg = PolynomialRegression(degree=2)\n",
    "poly2_reg.fit(X, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.0987392142417856"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y2_predict = poly2_reg.predict(X)\n",
    "mean_squared_error(y, y2_predict)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以看到使用多项式回归后，均方误差比使用线性回归低得多  \n",
    "数据可视化效果如下："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x108c6eef0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(x,y)\n",
    "plt.plot(np.sort(x), y2_predict[np.argsort(x)], color='r')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### degree为10的情况"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.0508466763764155"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "poly10_reg = PolynomialRegression(degree=10)\n",
    "poly10_reg.fit(X, y)\n",
    "y10_predict = poly10_reg.predict(X)\n",
    "mean_squared_error(y, y10_predict)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "均方误差更低了  \n",
    "拟合曲线是什么样子呢？"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x108faa978>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(x,y)\n",
    "plt.plot(np.sort(x), y10_predict[np.argsort(x)], color='r')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### degree为100的情况"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.6531777810504289"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "poly100_reg = PolynomialRegression(degree=100)\n",
    "poly100_reg.fit(X, y)\n",
    "y100_predict = poly100_reg.predict(X)\n",
    "mean_squared_error(y, y100_predict)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "均方误差的值更低了（注意，本章节没有使用训练集和测试集的分离，所以这个误差都是针对训练样本的，自然是degree越大误差越小）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x108c6e390>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(x,y)\n",
    "plt.plot(np.sort(x), y100_predict[np.argsort(x)], color='r')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "如果x在-3到3之间均匀分布，那么对应degree=100的拟合曲线，它的y值会是怎么样呢？"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10995cb38>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x_plot = np.linspace(-3,3,100).reshape(100,1)\n",
    "y_plot = poly100_reg.predict(x_plot)\n",
    "\n",
    "plt.scatter(x,y)\n",
    "plt.plot(x_plot[:,0], y_plot, color='r')\n",
    "plt.axis([-3,3,-1,10])  # 坐标轴，x轴取-3到3，y轴取-1到10\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# train test split的意义"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection._split import train_test_split\n",
    "X_train, X_test, y_train, y_test = train_test_split(X,y, random_state=666)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2.2199965269396573"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "lin_reg = LinearRegression()\n",
    "lin_reg.fit(X_train, y_train)\n",
    "y_predict = lin_reg.predict(X_test)\n",
    "mean_squared_error(y_test, y_predict)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.80356410562978997"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "poly2_reg = PolynomialRegression(degree=2)\n",
    "poly2_reg.fit(X_train, y_train)\n",
    "y2_predict = poly2_reg.predict(X_test)\n",
    "mean_squared_error(y_test, y2_predict)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以看到使用2阶多项式回归比线性回归的均方误差更小，泛化能力更强"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.92129307221507861"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "poly10_reg = PolynomialRegression(degree=10)\n",
    "poly10_reg.fit(X_train, y_train)\n",
    "y10_predict = poly10_reg.predict(X_test)\n",
    "mean_squared_error(y_test, y10_predict)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "改为10阶多项式回归时，均方误差比2阶多项式回归时反而更大了  \n",
    "换句话说，泛化能力变差了"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "117971955554.10373"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "poly100_reg = PolynomialRegression(degree=100)\n",
    "poly100_reg.fit(X_train, y_train)\n",
    "y100_predict = poly100_reg.predict(X_test)\n",
    "mean_squared_error(y_test, y100_predict)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "改为100阶多项式回归时，均方误差高得吓人"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
